package com.dolphin.aiagentplatform.utils;

import com.dolphin.aiagentplatform.ai.constant.AgentTypeConst;
import com.dolphin.aiagentplatform.model.vo.user.UserVO;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 聊天ID生成器
 * 用于生成和管理用户聊天会话ID
 */
@Component
public class ChatIdGenerator {

    // 用户最近使用的聊天ID映射 (userId -> chatId)
    private static final ConcurrentMap<Long, String> userLatestChatIdMap = new ConcurrentHashMap<>();

    // 日期时间格式化器
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    /**
     * 生成新的聊天ID
     *
     * @param user      用户信息
     * @param agentType 聊天代理类型
     * @return 新生成的聊天ID
     */
    public String generateChatId(UserVO user, AgentTypeConst agentType) {
        if (user == null || user.getId() == null) {
            throw new IllegalArgumentException("用户信息不能为空");
        }

        // 生成格式: agentType_userId_timestamp_uuid简短值
        String timestamp = LocalDateTime.now().format(FORMATTER);
        String uuidShort = UUID.randomUUID().toString().replace("-", "").substring(0, 8);

        String chatId = String.format("%s_%d_%s_%s",
                agentType.getAgentType(),
                user.getId(),
                timestamp,
                uuidShort);

        // 存储用户最新的聊天ID
        userLatestChatIdMap.put(user.getId(), chatId);

        return chatId;
    }

    /**
     * 获取用户最近使用的聊天ID
     *
     * @param userId 用户ID
     * @return 最近使用的聊天ID，如果不存在则返回null
     */
    public String getLatestChatId(Long userId) {
        if (userId == null) {
            return null;
        }
        return userLatestChatIdMap.get(userId);
    }

    /**
     * 更新用户最近使用的聊天ID
     *
     * @param userId 用户ID
     * @param chatId 聊天ID
     */
    public void updateLatestChatId(Long userId, String chatId) {
        if (userId == null || chatId == null || chatId.isEmpty()) {
            return;
        }
        userLatestChatIdMap.put(userId, chatId);
    }

    /**
     * 从聊天ID中提取用户ID
     *
     * @param chatId 聊天ID
     * @return 用户ID，如果无法解析则返回null
     */
    public Long extractUserIdFromChatId(String chatId) {
        if (chatId == null || chatId.isEmpty()) {
            return null;
        }

        try {
            String[] parts = chatId.split("_");
            if (parts.length >= 2) {
                return Long.parseLong(parts[1]);
            }
        } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
            // 解析失败，返回null
        }

        return null;
    }
} 